//
//  main.m
//  02-ClassAndObject
//
//  Created by 李昊林 on 16/7/5.
//  Copyright © 2016年 李昊林. All rights reserved.
//
#import "Person.h"
#import "Fraction.h"
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    // 1. 快捷键
    // command + 0 开/收起左边栏
    
    // command + option + 0 开/收起右边栏
    
    // command + shift + Y 开/收起下边栏
    
    // command + R 运行
    
    // command + B 编译
    
    // command + z 撤销
    
    // command + shift + z 反撤销/重做
    
    // command + C 复制
    
    // command + V 粘贴
    
    // command + N 新建文件
    
    // command + shift + N 新建工程
    
    // 移动光标
    // command + ⬅️移动到当前行的最前面
    // command + ➡️移动到当前行的最后面
    // command + ⬆️移动到所有行的第一行起始位置
    // command + ⬇️移动到所有行的最后一行起始位置

    // 3.选中文字
    // shift + ⬅️选中向左一个字
    // shift + ➡️选中向右一个字
    // shift + ⬆️从当前光标位置开始，选中上一行，对应的位置
    // shift + ⬇️从当前光标位置开始，选中下一行，对应的位置
    // command + shift + ⬅️ 选中从光标开始左边所有的文字。
    // command + shift + ➡️ 选中从光标开始右边所有的文字。
    // command + shift + ⬆️ 选中从光标开始上边所有的文字。
    // command + shift + ⬇️ 选中从光标开始下边所有的文字。
    
    
    // 1.类和对象
    // 类：一个具有相同特征和行为的事物抽象集合
    // 对象：类的实例，也称作类的实现。
    // 面向对象的思想：万物都是对象。
    // 面向对象语言是面向对象思想的具体体现。
    // OOP是面向对象编程。
    // OOD是面向对象设计。
    // 面向对象三大特征：封装，继承，多态 都是为了提高代码的复用
    
    // Objective-C(OC)
    // 和C语言得1区别是：
    // OC属于C语言的扩展
    // OC有类的概念
    // OC中声明属性和方法在.h中
    // OC中具体实现在.m中
    // .mm是C++的文件，在这个文件里可以编写C++代码
    
    
    // oc中的根类是NSObject
    
    //3.创建OC的实例
    //1>消息语法[objc dosomething];
    //向objc对象发送一个dosomething的方法，让他们调用
    //类方法的调用（由类名去调用其+方法）
    //开辟内存空间
    NSObject *objc = [NSObject alloc];
    //实例方法的调用
    //初始化 -init
//    NSObject *newobjc =  [objc init];
    
    
    //创建一个Person对象
    Person *per =[[Person alloc]init];
    //公开的成员可以直接通过-》赋值-》取值
    per->_age = 10;
    NSLog(@"%ld",per->_age);
    //受保护的成员不能通过->去访问
    
    
    // id 与 instancetype
    //instancetype在作为参数返回值的时候与id是一样的，系统编译器会把id类型转成instancetype（即当亲对象类型）
    // id可以作为变量类型去使用，但instancetype不可以
    id object =[[NSObject alloc] init];
    
    Fraction * f1 = [Fraction fractionWithNumerator:5 denominator:12];
    
    
    Fraction * f2 = [Fraction fractionWithNumerator:2 denominator:6];
    [[f1 addWith:f2] output];
    [[f1 subWith:f2] output];
    [[f1 mulWith:f2] output];
    [[f1 divWith:f2] output];
    
    
}


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
//    return 0;

